<?php

/**
 * TeacherManagement
 * Class to manage the teachers 
 */
class TeacherManagement
{
	private $classID = null;
	private $classDetails = null;

	/**
	 * formValues
	 * @var array The form values to manage teachers
	 */
	private $formValues = array
	(
		'firstname' => 'Voornaam',
		'lastname' => 'Achternaam',
		'username' => 'Gebruikersnaam',
		'password' => 'Wachtwoord',
		'password2' => 'Wachtwoord herhalen'
	);
	
	/**
	 * showAddForm()
	 * returns the form markup for adding a teacher
	 * 
	 * @param int $classID The ID of the class the teacher will be added to
	 * @return string generated markup
	 */
	function showAddForm($classID)
	{
		$class = mysql_query("SELECT klassen.id, klassen.school_id, klassen.naam, scholen.naam AS schoolnaam FROM `klassen`, `scholen` WHERE klassen.id='" . $classID . "' AND klassen.school_id=scholen.id");
		if(mysql_num_rows($class) != 1)
		{
			return "Klas bestaat niet";
		}

		$class = mysql_fetch_assoc($class);
		if(mysql_num_rows(mysql_query("SELECT * FROM `docenten` WHERE `klas_id`=" . $classID)) != 0)
		{
			return "Deze klas heeft al een docent";
		}

		$return = '<h1>Docent toevoegen aan de klas ' . $class['naam'] . ', ' . $class['schoolnaam'] . '</h1>';

		// If form is submitted, verify and process
		if($_SERVER['REQUEST_METHOD'] == 'POST')
		{
			$errors = $this->verifyAddForm();

			if($errors != null)
			{
				$return .= '<p class="error">' . $errors . '</p>';
			}
			else
			{
				$hashedPassword = hash('md5', $_POST['password2']);
				if(mysql_query("INSERT INTO `docenten` (klas_id, gebruikersnaam, voornaam, achternaam, wachtwoord) VALUES ('" . $class['id'] . "', '" . $_POST['username'] . "', '" . $_POST['firstname'] . "', '" . $_POST['lastname'] . "', '" . $hashedPassword . "')"))
				{
					return '<h1>Account aangemaakt</h1><p>Het account is succesvol aangemaakt, klik <a href="scholenbeheer/show_school/' . $class['school_id']. '">hier</a> om terug te gaan.</p>';
				}
				else
				{
					$return .= '<h1>Foutmelding</h1><p>Er is iets mis gegaan tijdens het aanmaken van het account, probeer het alstublieft opnieuw.</p>';
				}
			}
		}

		$return .= '<form method="post"><table>';
	
		// Loop the form values and fill them (if needed)
		foreach($this->formValues as $name=>$text)
		{
			$return .= '<tr>
				<td>' . $text . '</td>
				<td><input type="' . (strpos($name, 'password') !== false ? 'password' : 'text') . '" name="' . $name . '" value="' . (isset($_POST[$name]) ? $_POST[$name] : '') . '" /></td>
			</tr>';
		}

		$return .='<tr>
				<td></td>
				<td><input type="submit" value="Opslaan" /></td>
			</tr>
		</table></form>';

		return $return;
	}

	/**
	 * verifyAddForm()
	 * Verifies the submitted data
	 * 
	 * @return string Returns error data if encountered, else return null 
	 */
	private function verifyAddForm()
	{
		$errors = array();

		// all required forms filled?
		foreach($this->formValues as $key=>$value)
		{
			if(empty($_POST[$key]))
			{
				$errors[$key] = 'U moet het veld <strong>' . strtolower($value) . '</strong> invullen';
			}
		}

		// passwords matching?
		if($_POST['password'] != $_POST['password2'])
		{
			$errors['passwordcheck'] = 'De ingevulde wachtwoorden komen niet overeen';
		}

		// username taken?
		if(!isset($errors['username']))
		{
			$usernameTaken = mysql_num_rows(mysql_query("SELECT `id` FROM `Docenten` WHERE `gebruikersnaam`='" . $_POST['username'] . "'"));

			if($usernameTaken != 0)
			{
				$errors['username'] = 'De gebruikersnaam "<strong>' . $_POST['username'] . '</strong>" is helaas al bezet';
			}
		}

		// errors? return them
		if(count($errors) > 0)
		{
			return "<ul><li>" . implode("</li><li>", $errors) . "</li></ul>";
		}
	}

	/**
	 * showEditForm
	 * Prints the edit form to edit the teacher
	 * 
	 * @param int $userID The ID of the teacher
	 * @return string genertaed markup
	 */
	function showEditForm($userID)
	{
		$student = mysql_fetch_assoc(mysql_query("SELECT * FROM `docenten` WHERE `id`='" . $userID . "'"));

		if(gettype($student) != 'array')
		{
			return "Docent niet gevonden.";
		}

		$return = '<h1>Docent "' . $student['voornaam'] . ' ' . $student['achternaam'] . '" bewerken</h1><p>Wanneer u het wachtwoord niet wilt veranderen kunt u deze velden leeg laten.</p>';

		// If form is submitted, verify and process
		if($_SERVER['REQUEST_METHOD'] == 'POST')
		{
			$errors = $this->verifyEditForm($userID);

			if($errors != null)
			{
				$return .= '<p class="error">' . $errors . '</p>';
			}
			else
			{
				if(!empty($_POST['password2']))
				{
					$hashedPassword = hash('md5', $_POST['password2']);

					if(mysql_query("UPDATE `docenten` SET `voornaam`='" . $_POST['firstname'] . "', `achternaam`='" . $_POST['lastname'] . "', `gebruikersnaam`='" . $_POST['username'] . "', `wachtwoord`='" . $hashedPassword . "' WHERE `id`='" . $userID . "'"))
					{
						$return .= '<p class="success">De wijzigingen zijn opgeslagen!</p>';
					}
					else
					{
						$return .= '<p class="error">Er is iets fout gegaan bij het opslaan, probeer het opnieuw!</p>';
					}
				}
				else
				{
					if(mysql_query("UPDATE `Docenten` SET `voornaam`='" . $_POST['firstname'] . "', `achternaam`='" . $_POST['lastname'] . "', `gebruikersnaam`='" . $_POST['username'] . "' WHERE `id`='" . $userID . "'"))
					{
						$return .= '<p class="success">De wijzigingen zijn opgeslagen!</p>';
					}
					else
					{
						$return .= '<p class="error">Er is iets fout gegaan bij het opslaan, probeer het opnieuw!</p>';
					}
				}
			}
		}

		$return .= '<form method="post"><table>';

		$editValues = array
		(
			'firstname' => $student['voornaam'],
			'lastname' => $student['achternaam'],
			'username' => $student['gebruikersnaam'],
			'password' => '',
			'password2' => ''
		);

		// Loop the form values
		foreach($this->formValues as $name=>$text)
		{
			$return .= '<tr>
				<td>' . $text . '</td>
				<td><input type="' . (strpos($name, 'password') !== false ? 'password' : 'text') . '" name="' . $name . '" value="' . (isset($_POST[$name]) ? $_POST[$name] : $editValues[$name]) . '" /></td>
			</tr>';
		}

		$return .='<tr>
				<td></td>
				<td><input type="submit" value="Opslaan" /></td>
			</tr>
		</table></form>Indien u dit account wilt verwijderen, klik dan <a href="docentenbeheer/delete/' . $userID . '">hier</a>';

		return $return;
	}

	/**
	 * verifyEditForm
	 * Verifies the provided data
	 * 
	 * @param int $userID The teachers ID to verify the provided username isn't taken
	 * @return string Returns the error markup, or null if no errors were encountered 
	 */
	private function verifyEditForm($userID)
	{
		$errors = array();

		if(empty($_POST['username']))
		{
			$errors['username'] = 'U moet het veld <strong>Gebruikersnaam</strong> invullen';
		}
		if(empty($_POST['firstname']))
		{
			$errors['firstname'] = 'U moet het veld <strong>Voornaam</strong> invullen';
		}
		if(empty($_POST['lastname']))
		{
			$errors['lastname'] = 'U moet het veld <strong>Achternaam</strong> invullen';
		}

		// username taken?
		if(!isset($errors['username']))
		{
			$usernameTaken = mysql_num_rows(mysql_query("SELECT `id` FROM `docenten` WHERE `gebruikersnaam`='" . $_POST['username'] . "' AND `id` != " . $userID));

			if($usernameTaken != 0)
			{
				$errors['username'] = 'De gebruikersnaam "<strong>' . $_POST['username'] . '</strong>" is helaas al bezet';
			}
		}

		// Is password entered? If so, do they match?
		if(!empty($_POST['password']))
		{
			if($_POST['password'] != $_POST['password2'])
			{
				$errors['passwordcheck'] = 'De ingevulde wachtwoorden komen niet overeen';
			}
		}

		if(count($errors) > 0)
		{
			return "<ul><li>" . implode("</li><li>", $errors) . "</li></ul>";
		}
	}
	
	/**
	 * showDeleteConfirmation()
	 * @param int $userID The ID of the teacher
	 * @return string generated markup
	 */
	function showDeleteConfirmation($userID)
	{
		$studentQuery = mysql_query("SELECT * FROM `docenten` WHERE `id`='" . $userID . "'");
		
		if(mysql_num_rows($studentQuery) != 1)
		{
			return "Deze gebruiker bestaat niet.";
		}
		
		$student = mysql_fetch_assoc($studentQuery);
		
		if($_SERVER['REQUEST_METHOD'] == 'POST')
		{
			mysql_query("DELETE FROM `docenten` WHERE `id`='" . $userID . "'");
			$return = '<h1>Account verwijderd</h1><p>Het account met de gebruikersnaam "' . $student['gebruikersnaam'] . '" is succesvol verwijderd.</p>';
		}
		else
		{
			$return = '<h1>Bevestig verwijderen</h1>

			<p>Weet u zeker dat u het account met de gebruikersnaam "' . $student['gebruikersnaam'] . '" wilt verwijderen? Dit kan <strong>niet</strong> ongedaan worden!</p>
			<form method="post"><input type="submit" value="Ja, verwijder dit account" />&nbsp;<input type="button" onclick="location.href=\'index\'" value="Nee, breng mij terug" /></form>
			';
		}

		return $return;
	}
}